/* 
 * File:   TransformMatrix.h
 * Author: brady
 *
 * Created on March 28, 2011, 7:50 PM
 */

#ifndef TRANSFORMMATRIX_H
#define	TRANSFORMMATRIX_H

#include "Vector3D.h"

using namespace cs5721;
using namespace std;
class TransformMatrix {
public:
    const static int X_AXIS = 0;
    const static int Y_AXIS = 1;
    const static int Z_AXIS = 2;
    const static int R0 = 0;
    const static int R1 = 4;
    const static int R2 = 8;
    const static int R3 = 12;
    const static int C0 = 0;
    const static int C1 = 1;
    const static int C2 = 2;
    const static int C3 = 3;
    
    TransformMatrix();
    void SetZero();
    void SetIdentity();
    Vector3D Transform(const Vector3D& vector);
    Vector3D TransposeTransform(const Vector3D& vector);
    void Translate(double dx, double dy, double dz);
    void Rotate(double degrees, int axis);
    void Scale(double sx, double sy, double sz);
    virtual ~TransformMatrix();
    void Display();
    void Multiply(TransformMatrix& m);
    TransformMatrix GetInverse(); //THIS IS EXPENSIVE
    void VerifyInverse();
private:

    double Matrix[16];

};

#endif	/* TRANSFORMMATRIX_H */

